package Game;

import java.awt.Rectangle;
import java.util.Random;

import TDALista.Position;


/**
 * Clase Abstracta destruible donde esta puede ser una caja, arbol o pared. 
 * Los Objetos que son destruibles pueden almacenar o no algun premio, y pueden recibir una cierta cantidad de disparos
 * antes de desaparecer.
*/




public class Destruible extends Objeto {
	protected int indice;
	protected Premio premioInterno;
	protected Position<Destruible> posicion;
	
	/**
	 * Constructor de la clase Destruible donde se especifica que cantidad de disparos soporta.
	*/

	
	public Destruible(int i,char s) {
		super();
		indice=i;
		Random r = new Random();
		int azar = r.nextInt(4);
		switch(azar){
		
		case 0: {
				premioInterno=new Premio(0,ubicacion,s);
			
				break;
			
		}
		case 1:{
			premioInterno=new Premio(1,ubicacion,s);
			break;// puntos
		}
		case 2:{
			premioInterno=new Premio(2,ubicacion,s); 

			break;
		}
		case 3:{
			premioInterno=null;
			break;
		}
		}

	}
	
	/**
	 * Retorna la cantidad de disparo que puede recibir antes de desaparecer.
	*/

	
	public int getIndice() {
		return indice;
	
	}
	
	
	/**
	 * Setea la cantidad de disparos que puede recibir un Destruible.
	 * @param i que es el indice a setear.
	*/

	public void setIndice(int i) {
		indice = i; 
		
	}
	
	
	/**
	 * Al recibir un disparo un destruible, retorna la cantidad de disparos que todavia puede recibir.
	 * @return true si puede recibir disparo, false en caso contrario.
	*/

	public boolean recibirDisparo() {
		
		indice= indice-1; 
		if (indice==0)
		{
			
			getRG().setVisible(false); //no muestro mas el destruible
			
			if (premioInterno==null) //no hay premio interno 
				getUbicacion().getRG().setVisible(true); //muestro el piso
			else 	{
				
				
				premioInterno.getRG().setVisible(true);  
				switch(premioInterno.getTipo()){
				
				case 0: { 
					
						if (premioInterno.getPiso()=='S')
						premioInterno.getRG().setBalasArena();
						else premioInterno.getRG().setBalasAsfalto();
						
						break;
					
				}
				case 1:{
					if (premioInterno.getPiso()=='S')
						premioInterno.getRG().setPuntosArena();
					else 	premioInterno.getRG().setPuntosAsfalto();

						break;// puntos
				}
				case 2:{
					if (premioInterno.getPiso()=='S')
						premioInterno.getRG().setCombustibleArena();
					else 	premioInterno.getRG().setCombustibleAsfalto();					
					break;//
				}
			}


			return false;
		}
		}
		return true;
	
	}

	public void setPosition(Position<Destruible> p) {
		posicion=p;
	}

	public Position<Destruible> getPosition() {
		return posicion;
	}
	
	/**
	 * Retorna el rectangulo con el que se busca una colision
	 * @return Rectangle 
	 */
	
	public Rectangle getBounds() {
		return new Rectangle(posX,posY, 50, 50);
	}
	

	public Premio getPremio(){
		return premioInterno;
	}
	

}
